home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3.2 / Ham Radio Version 3.2 (Chestnut CD-ROMs)(1993).ISO / packet / n17jsrc / ripcmd.c < prev    next >
C/C++ Source or Header  |  1991-01-27  |  3KB  |  169 lines

  1. /* RIP-related user commands
  2.  *   Al Broscious, N3FCT
  3.  *   Phil Karn, KA9Q
  4.  */
  5. #include <stdio.h>
  6. #include "global.h"
  7. #include "mbuf.h"
  8. #include "netuser.h"
  9. #include "internet.h"
  10. #include "cmdparse.h"
  11. #include "timer.h"
  12. #include "iface.h"
  13. #include "udp.h"
  14. #include "rip.h"
  15. #include "commands.h"
  16.  
  17. struct cmds Ripcmds[] = {
  18.     "accept",    dodroprefuse,    0,    2,
  19.         "rip accept <gateway> ",
  20.     "add",        doripadd,    0,    3,
  21.         "rip add <dest> <interval> [<flags>]",
  22.     "drop",        doripdrop,    0,    2,
  23.         "rip drop <dest>",
  24.     "merge",    doripmerge,    0,    0,    NULLCHAR,
  25.     "refuse",    doaddrefuse,    0,    2,
  26.         "rip refuse <gateway>",    
  27.     "request",    doripreq,    0,    2,    NULLCHAR,
  28.     "status",    doripstat,    0,    0,    NULLCHAR,
  29.     "trace",    doriptrace,    0,    0,    NULLCHAR,
  30.     NULLCHAR,
  31. };
  32.  
  33. int
  34. dorip(argc,argv,p)
  35. int argc;
  36. char *argv[];
  37. void *p;
  38. {
  39.     return subcmd(Ripcmds,argc,argv,p);
  40. }
  41.  
  42. /* Add an entry to the RIP output list */
  43. int
  44. doripadd(argc,argv,p)
  45. int argc;
  46. char *argv[];
  47. void *p;
  48. {
  49.     char flags = 0;
  50.  
  51.     if(argc > 3)
  52.         flags = atoi(argv[3]);
  53.  
  54.     return rip_add(resolve(argv[1]),atol(argv[2]),flags);
  55. }
  56.  
  57. /* Add an entry to the RIP refuse list */
  58. int
  59. doaddrefuse(argc,argv,p)
  60. int argc;
  61. char *argv[];
  62. void *p;
  63. {
  64.     return riprefadd(resolve(argv[1]));
  65. }
  66.  
  67. /* Drop an entry from the RIP output list */
  68. int
  69. doripdrop(argc,argv,p)
  70. int argc;
  71. char *argv[];
  72. void *p;
  73. {
  74.     return rip_drop(resolve(argv[1]));
  75. }
  76.  
  77. /* Drop an entry from the RIP refuse list */
  78. int
  79. dodroprefuse(argc,argv,p)
  80. int argc;
  81. char *argv[];
  82. void *p;
  83. {
  84.     return riprefdrop(resolve(argv[1]));
  85. }
  86.  
  87. /* Initialize the RIP listener */
  88. int
  89. doripinit(argc,argv,p)
  90. int argc;
  91. char *argv[];
  92. void *p;
  93. {
  94.     return rip_init();
  95. }
  96. int
  97. doripstop(argc,argv,p)
  98. int argc;
  99. char *argv[];
  100. void *p;
  101. {
  102.     del_udp(Rip_cb);
  103.     Rip_cb = NULLUDP;
  104.     return 0;
  105. }
  106. int
  107. doripreq(argc,argv,p)
  108. int argc;
  109. char *argv[];
  110. void *p;
  111. {
  112.     int16 replyport;
  113.  
  114.     if(argc > 2)
  115.         replyport = atoi(argv[2]);
  116.     else
  117.         replyport = RIP_PORT;
  118.     return ripreq(resolve(argv[1]),replyport);
  119. }
  120. /* Dump RIP statistics */
  121. int
  122. doripstat(argc,argv,p)
  123. int argc;
  124. char *argv[];
  125. void *p;
  126. {
  127.     struct rip_list *rl;
  128.     struct rip_refuse *rfl;
  129.  
  130.     tprintf("RIP: sent %lu rcvd %lu reqst %lu resp %lu unk %lu refused %lu\n",
  131.      Rip_stat.output, Rip_stat.rcvd, Rip_stat.request, Rip_stat.response,
  132.      Rip_stat.unknown,Rip_stat.refusals);
  133.     if(Rip_list != NULLRL){
  134.         tprintf("Active RIP output interfaces:\n");
  135.         tprintf("Dest Addr       Interval Split\n");
  136.         for(rl=Rip_list; rl != NULLRL; rl = rl->next){
  137.             if(tprintf("%-16s%-9lu%-6u\n",
  138.              inet_ntoa(rl->dest),rl->interval,
  139.              !!(rl->flags&RIP_SPLIT)) == EOF)
  140.                 break;
  141.         }
  142.     }
  143.     if(Rip_refuse != NULLREF){
  144.         tprintf("Refusing announcements from gateways:\n");
  145.         for(rfl=Rip_refuse; rfl != NULLREF;rfl = rfl->next){
  146.             if(tprintf("%s\n",inet_ntoa(rfl->target)) == EOF)
  147.                 break;
  148.         }
  149.     }
  150.     return 0;
  151. }
  152.  
  153. int
  154. doriptrace(argc,argv,p)
  155. int argc;
  156. char *argv[];
  157. void *p;
  158. {
  159.     return setshort(&Rip_trace,"RIP tracing",argc,argv);
  160. }
  161. int
  162. doripmerge(argc,argv,p)
  163. int argc;
  164. char *argv[];
  165. void *p;
  166. {
  167.     return setbool(&Rip_merge,"RIP merging",argc,argv);
  168. }
  169.